有关C语言中的一句:[c-'0']怎么解释?附上整条语句.

来源:百度知道 编辑:UC知道 时间:2024/05/25 03:37:08
整个程序如下:
#include<stdio.h>
main()
{
int c,i,nwhite,nother;
int ndigit[10];
nwhite=nother=0;
for(i=0;i<10;++i)
ndigit[i]=0;
while ((c=getchar())!=EOF)
if (c>='0'&&c<='9')
++ndigit[c-'0']; <--这句看不懂
else if (c==' '||c=='\n'||c=='\t')
++nwhite;
else
++nother;
printf("digits="0;
for(i=0;i<10;++i)
printf(" %d",ndigit[i]);
printf(", white space= %d,other= %d\n",
nwhite,nother);
}
++ndigit[c-'0'];这句里的[c-'0']出现得很突然,不知道什么意思?我试着把它改成[c]程序输出不对了.
对二楼的解释还是不是很懂.在这个程序中,语句[C-'0']是为了让ARRAY ndigit的角注从0到9渐变吗?那么我猜0~9的ASCII码是不是48~57?然后这儿还有一个问题:是不是表示成'0',整个'0'就是表示整型数48,那么"0"呢?表示什么?
还有感谢liaoyichong的回答尽管不是我想要的,但是让我又知道了一点.可惜这儿不能采纳多个答案.

c的ASCII码减去0的ASCII码的值自动转换成整型
即得到ndigit[0...9];

0的ASCII码是48
如果不减得到是ndigit[48...57];

你只所以看不懂 是因为 你对 \'0\' 之类的字符 不了解,你可以看一下 ASCII码!! \'0\' 的意思就是一个 字符0 ,而不是数字0,字符0 的ASCII码 是48,也就是说,在 C语言中 int 类型的48, 和 char 类型的 \'0\' 是完全等价的.
从上面的if语句说起, 变量C 的值 来自 getchar(),即 读取键盘的输入.if判断的意思是 如果输入的字符在 0~9之间,那么就让他变成其他字符.

整型数据跟字符数据可以相互运算,C为整型,'0'为字符型,运算时所有数据往强数据类型转化,因为整型强于字符型,故它们相减结果为整型.

相当于[c-48]

只要了解'0'是代表一个字符,数据类型可能转换,而且字符型要转换为整型就可以懂这句的含义了.